package com.tangruojie.config;

import com.tangruojie.controller.interceptor.ProjectInterceptor;
import com.tangruojie.controller.interceptor.ProjectInterceptor2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 是“非侵入式”的；
 * SpringMVC 会将你扩展的配置自动合并到默认配置中；
 * 更推荐用于 SpringBoot 或普通增强配置。
 */
@Configuration
@ComponentScan({"com.tangruojie.controller"})
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {

    @Autowired
    private ProjectInterceptor projectInterceptor;

    @Autowired
    private ProjectInterceptor2 projectInterceptor2;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(projectInterceptor)
                .addPathPatterns("/books", "/books/*");
        registry.addInterceptor(projectInterceptor2)
                .addPathPatterns("/books", "/books/*");
    }

}
/**
 * 比较项	        WebMvcConfigurer	            WebMvcConfigurationSupport
 * 类型	            接口（Java 8 默认方法）	        抽象类
 * 扩展方式	        实现接口中的默认方法	            继承抽象类并重写方法
 * 设计目的	        增强默认 SpringMVC 配置	        完全自定义并接管 SpringMVC 配置
 * 是否保留默认配置	✅ 是	                        ❌ 否（会覆盖默认配置）
 * 自动配置是否生效	✅ 是	                        ❌ 否
 * 推荐使用场景	    SpringBoot 项目增强、轻量配置	    需要完全自定义 DispatcherServlet 行为时使用
 * 是否支持多个	    ✅ 可有多个实现并合并	            ❌ 只能有一个配置类继承它
 * 示例功能	        添加拦截器、静态资源、跨域	        添加拦截器 + 静态资源 + 视图解析等全部自定义
 */